// import com.alibaba.druid.sql.dialect.oracle.ast.OracleSegmentAttributes;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleSegmentAttributesImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <list>
#include "../dialect/oracle/ast/OracleSegmentAttributes.h"
#include "../dialect/oracle/ast/OracleSegmentAttributesImpl.h"

class SQLName;
class SQLExpr;
class SQLSubPartition;
class SQLPartitionValue;

class SQLPartition : public OracleSegmentAttributesImpl /*   , virtual public OracleSegmentAttributes   */
{
public:
  SQLName_ptr name;

  SQLExpr_ptr subPartitionsCount;

  SQLSubPartition_list_ptr subPartitions;

  SQLPartitionValue_ptr values;

  // for mysql
  SQLExpr_ptr dataDirectory;
  SQLExpr_ptr indexDirectory;
  SQLExpr_ptr maxRows;
  SQLExpr_ptr minRows;
  SQLExpr_ptr engine;
  SQLExpr_ptr comment;

  // for oracle
  BOOL_ptr segmentCreationImmediate;
  BOOL_ptr segmentCreationDeferred;

  SQLObject_ptr lobStorage;

  SQLExpr_ptr locality;

  SQLPartition();
  SHAREDOBJECT(SQLPartition);
  SQLExpr_ptr getLocality();

  void setLocality(SQLExpr_ptr x);

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  SQLExpr_ptr getSubPartitionsCount();

  void setSubPartitionsCount(SQLExpr_ptr subPartitionsCount);

  SQLPartitionValue_ptr getValues();

  void setValues(SQLPartitionValue_ptr values);

  SQLSubPartition_list_ptr getSubPartitions();

  void addSubPartition(SQLSubPartition_ptr partition);

  SQLExpr_ptr getIndexDirectory();

  void setIndexDirectory(SQLExpr_ptr indexDirectory);

  SQLExpr_ptr getDataDirectory();

  void setDataDirectory(SQLExpr_ptr dataDirectory);

  SQLExpr_ptr getMaxRows();

  void setMaxRows(SQLExpr_ptr maxRows);

  SQLExpr_ptr getMinRows();

  void setMinRows(SQLExpr_ptr minRows);

  SQLExpr_ptr getEngine();

  void setEngine(SQLExpr_ptr engine);

  SQLExpr_ptr getComment();

  void setComment(SQLExpr_ptr comment);

  void accept0(SQLASTVisitor_ptr visitor);

  SQLObject_ptr getLobStorage();

  void setLobStorage(SQLObject_ptr lobStorage);

  BOOL_ptr isSegmentCreationImmediate();

  void setSegmentCreationImmediate(BOOL_ptr segmentCreationImmediate);

  BOOL_ptr isSegmentCreationDeferred();

  void setSegmentCreationDeferred(BOOL_ptr segmentCreationDeferred);

  // SQLPartition *clone();
  virtual SQLObject_ptr clone();
};
